package com.kobe.project.domain;

import java.math.BigDecimal;
import java.util.Date;

import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import com.kobe.common.annotation.Excel;
import com.kobe.common.core.domain.BaseEntity;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;

import javax.validation.constraints.NotNull;

/**
 * 项目管理对象 sys_oa_project
 *
 * @author ruoyi
 * @date 2025-10-18
 */
public class SysOaProject extends BaseEntity
{
    private static final long serialVersionUID = 1L;

    /** ID */
    private Long projectId;

    /** 项目名称 */
    @Excel(name = "项目名称")
    @NotNull(message = "项目名称不能为空")
    private String projectName;

    /** 项目编号 */
    @Excel(name = "项目编号")
    @NotNull(message = "项目编号不能为空")
    private String projectNum;

    /** 项目类型(1中标，2其他) */
    @Excel(name = "项目类型(1中标，2其他)")
    @NotNull(message = "项目类型不能为空")
    private String projectType;

    /** 项目地址 */
    private String address;

    /** 项目总款 */
    @Excel(name = "项目总款")
    @NotNull(message = "项目总款不能为空")
    private BigDecimal funds;

    /** 项目负责人 */
    @Excel(name = "项目负责人")
    private String functionary;

    /** 开始日期 */
    private Date beginTime;

    /** 结束日期 */
    private Date finishTime;

    /** 交货期 */
    private String delivery;

    /** 质保期 */
    private String guarantee;

    /** 项目介绍 */
    private String introduction;

    /** 优先级（0一般 1中 2高） */
    private String projectGrade;

    /** 状态（0进行中 1完结） */
    @Excel(name = "状态", readConverterExp = "0=进行中,1=完结")
    private String projectStatus;

    /** 关联合同ID */
    private Long contractId;

    /** 开票单位名称 */
    private String invoiceName;

    /** 纳税人识别号 */
    private String invoiceNumber;

    /** 开票地址电话 */
    private String invoiceAddress;

    /** 开户行及账号 */
    private String invoiceBank;

    /** 附件 */
    private String accessory;

    /** 履约保证金 */
    @Excel(name = "履约保证金")
    private JSONObject bail;

    public void setProjectId(Long projectId)
    {
        this.projectId = projectId;
    }

    public Long getProjectId()
    {
        return projectId;
    }

    public void setProjectName(String projectName)
    {
        this.projectName = projectName;
    }
    @NotNull(message = "项目名称不能为空")
    public String getProjectName()
    {
        return projectName;
    }

    public void setProjectNum(String projectNum)
    {
        this.projectNum = projectNum;
    }
    @NotNull(message = "项目编号不能为空")
    public String getProjectNum()
    {
        return projectNum;
    }

    public void setProjectType(String projectType)
    {
        this.projectType = projectType;
    }
    @NotNull(message = "项目类型不能为空")
    public String getProjectType()
    {
        return projectType;
    }

    public void setAddress(String address)
    {
        this.address = address;
    }
    @NotNull(message = "项目地址不能为空")
    public String getAddress()
    {
        return address;
    }

    public void setFunds(BigDecimal funds)
    {
        this.funds = funds;
    }

    public BigDecimal getFunds()
    {
        return funds;
    }

    public void setFunctionary(String functionary)
    {
        this.functionary = functionary;
    }

    public String getFunctionary()
    {
        return functionary;
    }

    public void setBeginTime(Date beginTime)
    {
        this.beginTime = beginTime;
    }

    public Date getBeginTime()
    {
        return beginTime;
    }

    public void setFinishTime(Date finishTime)
    {
        this.finishTime = finishTime;
    }

    public Date getFinishTime()
    {
        return finishTime;
    }

    public void setDelivery(String delivery)
    {
        this.delivery = delivery;
    }

    public String getDelivery()
    {
        return delivery;
    }

    public void setGuarantee(String guarantee)
    {
        this.guarantee = guarantee;
    }

    public String getGuarantee()
    {
        return guarantee;
    }

    public void setIntroduction(String introduction)
    {
        this.introduction = introduction;
    }

    public String getIntroduction()
    {
        return introduction;
    }

    public void setProjectGrade(String projectGrade)
    {
        this.projectGrade = projectGrade;
    }

    public String getProjectGrade()
    {
        return projectGrade;
    }

    public void setProjectStatus(String projectStatus)
    {
        this.projectStatus = projectStatus;
    }

    public String getProjectStatus()
    {
        return projectStatus;
    }

    public void setContractId(Long contractId)
    {
        this.contractId = contractId;
    }

    public Long getContractId()
    {
        return contractId;
    }

    public void setInvoiceName(String invoiceName)
    {
        this.invoiceName = invoiceName;
    }

    public String getInvoiceName()
    {
        return invoiceName;
    }

    public void setInvoiceNumber(String invoiceNumber)
    {
        this.invoiceNumber = invoiceNumber;
    }

    public String getInvoiceNumber()
    {
        return invoiceNumber;
    }

    public void setInvoiceAddress(String invoiceAddress)
    {
        this.invoiceAddress = invoiceAddress;
    }

    public String getInvoiceAddress()
    {
        return invoiceAddress;
    }

    public void setInvoiceBank(String invoiceBank)
    {
        this.invoiceBank = invoiceBank;
    }

    public String getInvoiceBank()
    {
        return invoiceBank;
    }

    public void setAccessory(String accessory)
    {
        this.accessory = accessory;
    }

    public String getAccessory()
    {
        return accessory;
    }

    public void setBail(JSONObject bail)
    {
        this.bail = bail;
    }

    public JSONObject getBail()
    {
        return bail;
    }

    @Override
    public String toString() {
        return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
                .append("projectId", getProjectId())
                .append("projectName", getProjectName())
                .append("projectNum", getProjectNum())
                .append("projectType", getProjectType())
                .append("address", getAddress())
                .append("funds", getFunds())
                .append("functionary", getFunctionary())
                .append("beginTime", getBeginTime())
                .append("finishTime", getFinishTime())
                .append("delivery", getDelivery())
                .append("guarantee", getGuarantee())
                .append("introduction", getIntroduction())
                .append("projectGrade", getProjectGrade())
                .append("projectStatus", getProjectStatus())
                .append("contractId", getContractId())
                .append("invoiceName", getInvoiceName())
                .append("invoiceNumber", getInvoiceNumber())
                .append("invoiceAddress", getInvoiceAddress())
                .append("invoiceBank", getInvoiceBank())
                .append("accessory", getAccessory())
                .append("bail", getBail())
                .append("remark", getRemark())
                .append("createBy", getCreateBy())
                .append("createTime", getCreateTime())
                .append("updateBy", getUpdateBy())
                .append("updateTime", getUpdateTime())
                .toString();
    }
}

